package com.owc.service.app;

import com.github.pagehelper.PageInfo;
import com.owc.common.enums.OrderType;
import com.owc.domain.DO.BuyModel;
import com.owc.domain.PageBean;
import com.owc.domain.dto.OrderDTO;
import com.owc.domain.dto.OrderDetailDTO;
import com.owc.domain.dto.admin.WealthDTO;
import com.owc.domain.entity.Order;
import com.owc.domain.vo.admin.WealthQueryVo;
import org.springframework.lang.NonNull;

import java.math.BigDecimal;
import java.util.List;

/**
 * @Author xiaom
 * @Date 2020/2/26 16:38
 * @Version 1.0.0
 * @Description <>
 **/
public interface OrderService {

    /**
     * 购买产品
     * @return 订单号
     */
    Long generateOrder(BuyModel buyModel) throws Exception;

    /**
     * 获取用户订单列表
     * @param pageIndex 分页
     * @param pageSize   分页
     * @return 订单猎豹
     */
    PageBean<OrderDTO> getOrderList(Integer pageIndex, Integer pageSize);

    /**
     * 获取订单详情
     * @param id 订单主键ID
     * @return 订单详细信息
     */
    OrderDetailDTO getOrderDetail(Long id);

    /**
     * 获取产品下已售出的订单列表
     * @param productId 产品ID
     */
    PageInfo<Order> getOrderListByProductId(@NonNull Long productId,Integer pageIndex,Integer pageSize);

    /**
     * 统计购买产品的总金额
     * @param id 产品ID
     * @return 金额
     */
    BigDecimal statisticsAmount(Long id);

    /**
     * 获取所有订单列表
     */
    PageInfo<Order> getAllOrderList(WealthQueryVo wealthQueryVo);

    /**
     * 本金赎回
     * @param id 订单ID
     * @return 操作结果
     */
    Boolean redemption(Long id) throws Exception;

    /**
     * 获取订单列表
     * @param type 订单状态
     * @return 订单列表
     */
    List<Order> getValidOrderList(OrderType type);
}
